/*
 * extern.h
 *
 * part of Pro-Wizard-1 package
 * (c) Sylvain "Asle" Chipaux
 */

#pragma once

/* tests */
#ifdef INCLUDEALL
extern short testArcDDataCruncher();
extern short testByteKiller_13();
extern short testByteKiller_20();
extern short testByteKiller30();
extern short testbytekillerpro10();
extern short testcrunchmaniaAddr();
extern short testcrunchmaniaSimple();
extern short testCRND();
extern short testDefjam32();
extern short testDefjam32pro();
extern short testDefjamCruncher32t();
extern short testDoubleAction10();
extern short testDragpack100();
extern short testDragpack252();
extern short testGNUPacker12();
extern short testHQCCruncher2();
extern short testMasterCruncher30addr();
extern short testMaxPacker12();
extern short testMegaCruncher10();
extern short testMegaCruncher12();
extern short testMegaCruncherObj();
extern short testPowerpacker23();
extern short testPowerpacker30();
extern short testPowerpacker40();
extern short testPowerpacker4lib();
extern short testPPbk();
extern short testRelokIt10();
extern short testSpikeCruncher();
extern short testSTC299();
extern short testSTC299b();
extern short testSTC299d();
extern short testSTC300();
extern short testSTC310();
extern short testStoneCracker270();
extern short testSuperCruncher27();
extern short testSyncroPacker();
extern short testTetrapack102();
extern short testTetrapack_2_1();
extern short testTetrapack_2_2();
extern short testTimeCruncher17();
extern short testTNMCruncher11();
extern short testTryIt101();
extern short testTurboSqueezer61();
#endif
extern short testAC1D();
extern short testAmBk();
extern short testBP();
extern short testBSIFutureComposer();
extern short testDI();
extern short testDigiBooster17();
extern short testEUREKA();
extern short testFC_M();
extern short testFC13();
extern short testFC14();
extern short testFuchsTracker();
extern short testFUZZAC();
extern short testGnuPlayer();
extern short testGMC();
extern short testGPMO();
extern short testHEATSEEKER();
extern short testHRT();
extern short testJamCracker();
extern short testKRIS();
extern short testKSM();
extern short testMMD0();
extern short testMOD(int);
extern short testMP_noID();
extern short testMP_withID();
extern short testMUGICIAN();
extern short testNewtron();
extern short testNewtronOld();
extern short testNFH();
extern short testNoiserunner();
extern short testNoisepacker1();
extern short testNoisepacker2();
extern short testNoisepacker3();
extern short testNovoTrade();
extern short testP40A();
extern short testP41A();
extern short testP50A();
extern short testP60A_nopack();
extern short testP60A_pack();
extern short testP61A_nopack();
extern short testP61A_pack();
extern short testPHA();
extern short testPM();
extern short testPM01();
extern short testPM10c();
extern short testPM2();
extern short testPM40();
extern short testPMZ();
extern short testPolka();
extern short testPP10();
extern short testPP21();
extern short testPP30();
extern short testPRUN1();
extern short testPRUN2();
/*extern short testPTK();*/
extern short testQuadraComposer();
extern short testSGT();
extern short testSkizzo();
extern short testSKYT();
extern short testSoundFX13();
extern short testSoundTracker();
extern short testSTARPACK();
extern short testSTK26();
extern short testSTIM();
extern short testStoneArtsPlayer();
extern short testTheDarkDemon();
extern short testTitanicsPlayer();
extern short testTMK();
extern short testTP1();
extern short testTP2();
extern short testTP3();
extern short testUNIC_noID();
extern short testUNIC_withID();
extern short testUNIC_withemptyID();
extern short testUNIC2();
extern short testWN();
extern short testXANN();
extern short testXM();
extern short testZEN();

/* rips */

#ifdef INCLUDEALL
extern void Rip_ByteKiller();
extern void Rip_ByteKiller30();
extern void Rip_bytekillerpro10();
extern void Rip_CrunchmaniaAddr();
extern void Rip_CrunchmaniaSimple();
extern void Rip_Defjam32();
extern void Rip_DoubleAction10();
extern void Rip_Dragpack100();
extern void Rip_Dragpack252();
extern void Rip_GNUPacker12();
extern void Rip_HQCCruncher2();
extern void Rip_MasterCruncher30addr();
extern void Rip_MaxPacker12();
extern void Rip_MegaCruncher();
extern void Rip_MegaCruncherObj();
extern void Rip_Powerpacker23();
extern void Rip_Powerpacker30();
extern void Rip_Powerpacker40();
extern void Rip_Powerpacker4lib();
extern void Rip_PPbk();
extern void Rip_RelokIt10();
extern void Rip_SpikeCruncher();
extern void Rip_STC299();
extern void Rip_STC299b();
extern void Rip_STC299d();
extern void Rip_STC300();
extern void Rip_STC310();
extern void Rip_StoneCracker270();
extern void Rip_SuperCruncher27();
extern void Rip_SyncroPacker();
extern void Rip_Tetrapack102();
extern void Rip_Tetrapack_2_1();
extern void Rip_Tetrapack_2_2();
extern void Rip_TimeCruncher17();
extern void Rip_TNMCruncher11();
extern void Rip_TryIt101();
extern void Rip_TurboSqueezer61();
#endif
extern void Rip_AC1D();
extern void Rip_AmBk();
extern void Rip_BP();
extern void Rip_BSIFutureComposer();
extern void Rip_DI();
extern void Rip_DigiBooster17();
extern void Rip_EUREKA();
extern void Rip_FC_M();
extern void Rip_FC13();
extern void Rip_FC14();
extern void Rip_FuchsTracker();
extern void Rip_Fuzzac();
extern void Rip_GnuPlayer();
extern void Rip_GMC();
extern void Rip_GPMO();
extern void Rip_HEATSEEKER();
extern void Rip_HRT();
extern void Rip_JamCracker();
extern void Rip_KRIS();
extern void Rip_KSM();
extern void Rip_MMD0();
extern void Rip_MOD(int);
extern void Rip_MUGICIAN();
extern void Rip_MP_noID();
extern void Rip_MP_withID();
extern void Rip_Newtron();
extern void Rip_NewtronOld();
extern void Rip_NFH();
extern void Rip_Noisepacker1();
extern void Rip_Noisepacker2();
extern void Rip_Noisepacker3();
extern void Rip_Noiserunner();
extern void Rip_NovoTrade(void);
extern void Rip_P22A();
extern void Rip_P30A();
extern void Rip_P40A();
extern void Rip_P40B();
extern void Rip_P41A();
extern void Rip_P50A();
extern void Rip_P60A();
extern void Rip_P61A();
extern void Rip_PHA();
extern void Rip_PM();
extern void Rip_PM01();
extern void Rip_PM10c();
extern void Rip_PM18a();
extern void Rip_PM20();
extern void Rip_PM40();
extern void Rip_Polka();
extern void Rip_PP10();
extern void Rip_PP21();
extern void Rip_PP30();
/*extern void Rip_PTK();*/
extern void Rip_QuadraComposer();
extern void Rip_SGT();
extern void Rip_Skizzo();
extern void Rip_SKYT();
extern void Rip_SoundFX13();
extern void Rip_SoundTracker();
extern void Rip_STARPACK();
/*extern void Rip_StarTrekker();*/
extern void Rip_STK26();
extern void Rip_STIM();
extern void Rip_StoneArtsPlayer();
extern void Rip_TheDarkDemon();
extern void Rip_TitanicsPlayer();
extern void Rip_TMK();
extern void Rip_TP1();
extern void Rip_TP2();
extern void Rip_TP3();
extern void Rip_PRUN2();
extern void Rip_PRUN1();
extern void Rip_UNIC_withID();
extern void Rip_UNIC_noID();
extern void Rip_UNIC2();
extern void Rip_WN();
extern void Rip_XANN();
extern void Rip_XM();
extern void Rip_ZEN();

/* depack */

extern void Depack_AmBk();
extern void Depack_AC1D();
extern void Depack_SoundFX13();
extern void Depack_DI();
extern void Depack_EUREKA();
extern void Depack_FC_M();
extern void Depack_FuchsTracker();
extern void Depack_Fuzzac();
extern void Depack_GnuPlayer();
extern void Depack_GMC();
extern void Depack_GPMO();
extern void Depack_HEATSEEKER();
extern void Depack_HRT();
extern void Depack_KRIS();
extern void Depack_KSM();
extern void Depack_MP();
extern void Depack_Newtron();
extern void Depack_NewtronOld();
extern void Depack_NFH();
extern void Depack_Noiserunner();
extern void Depack_Noisepacker1();
extern void Depack_Noisepacker2();
extern void Depack_Noisepacker3();
extern void Depack_NovoTrade();
extern void Depack_P22();
extern void Depack_P30();
extern void Depack_P40();
extern void Depack_P41A();
extern void Depack_P50A();
extern void Depack_P60A();
extern void Depack_P61A();
extern void Depack_PHA();
extern void Depack_PM01();
extern void Depack_PM10c();
extern void Depack_PM18a();
extern void Depack_PM20();
extern void Depack_PM40();
extern void Depack_PM();
extern void Depack_Polka();
extern void Depack_PP10();
extern void Depack_PP21();
extern void Depack_PP30();
extern void Depack_PRUN1();
extern void Depack_PRUN2();
extern void Depack_QuadraComposer();
extern void Depack_SGT();
extern void Depack_Skizzo();
extern void Depack_SKYT();
extern void Depack_STARPACK();
extern void Depack_STK26();
extern void Depack_STIM();
extern void Depack_StoneArtsPlayer();
extern void Depack_TheDarkDemon();
extern void Depack_TitanicsPlayer();
extern void Depack_TMK();
extern void Depack_TP1();
extern void Depack_TP2();
extern void Depack_TP3();
extern void Depack_UNIC();
extern void Depack_UNIC2();
extern void Depack_WN();
extern void Depack_XANN();
extern void Depack_ZEN();

/* misc */

extern void Support_Types();
extern void Support_Types_FileDefault();
extern void Save_Rip(char*, int);
extern void Save_Rip_Special(char*, int, Uchar *, Ulong);
extern void Crap(char*, Uchar, Uchar, FILE*);
extern short testSpecialCruncherData(long, long);
extern void Rip_SpecialCruncherData(char*, int, int);
extern short test_1_start(Ulong);
extern short test_smps(long, long, long, Uchar, Uchar);
extern long PWGetFileSize(char*);
extern FILE * PW_fopen(char*, char*);
extern void fillPTKtable(Uchar[37][2]);

/* globals */
/* Some say it's badly coding when using Globals ... sure it is, now what's the solution ? */

extern FILE* PW_in, * PW_out;
extern long PW_Start_Address;
extern Ulong OutputSize;
extern long PW_in_size;
extern long Cpt_Filename;
extern Ulong PW_i;
extern Ulong PW_j, PW_k, PW_l, PW_m, PW_n, PW_o;
extern Uchar* in_data;
/*extern Uchar OutName[5];*/
extern char OutName_final[33];
extern char Depacked_OutName[33];
extern Uchar Save_Status;
extern Ulong PW_WholeSampleSize;
extern char Extensions[_KNOWN_FORMATS + 1][33];
extern Uchar CONVERT;
extern Uchar Amiga_EXE_Header;

extern void pw_write_log(const char*, ...);
extern FILE * moduleripper2_fopen(const char* name, const char* mode, const char* aid, int addr, int size);
extern FILE * moduleripper_fopen(const char* aname, const char* amode);